home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Scene Storm
/
Scene Storm - Volume 1.iso
/
coding
/
asm
/
utils
/
beermon
/
moni.doc
< prev
next >
Wrap
Text File
|
1980-01-03
|
75KB
|
1,561 lines
*****************************************************************************
* *
* Documentation for the BeerMon V0.46c farewell release. Date: 18-Jun-93 *
* *
* - (C) 1990,1991,1992,1993 by Carnivore/BeerMacht *
* *
* "With my art I am the fist in the face of god" *
* *
* DISCLAIMER *
* *
* This program is FREEWARE, this means that you can copy it freely as long *
* as you don't ask any more money for it than a nominal fee for copying. *
* If you want to distribute this program you should keep this document and *
* the schematics with it. This program cannot be used for commercial *
* purposes without written permission from the author. The author is not *
* responsible for any loss of data, damages to software or hardware that *
* may result directly or indirectly from the use of this program. *
* *
* *
* *
* NOTE: This seems to be the LAST version of the BeerMon written by myself *
* ---- as any further motivation ceased to exist. Anybody may feel invited *
* to continue working on the source if he/she likes to do so. *
* The only thing I ask for is that I get some credits for the work I *
* did if you intend to release an improved version or use parts of my *
* sourcecode within your own productions. (And you may even spend *
* me a beer if we happen to meet someday somewhere :-) *
* *
*****************************************************************************
It is done. The BEERMACHT presents the BeerMon, which seems to contain some
outstanding features other known monitors don't have. Any hints, comments,
bug reports or opinions are highly appreciated and can be made in those
german BBS the users "BEERMACHT" or "CARNIVORE" appear in, prefered in
these ones:
INTERFACE +49 208 xxxxx (get the numbers somewhere)
or THE CAULDRON +49 202 xxxxx (get the number somewhere)
or LAST RESORT +49 211 xxxxx (get the numbers somewhere)
or BEERKRUG +49 2102 xxxxxx (just for very private usership)
or PUNGENT STENCH +49 2102 xxxxxx (even more private usership :-)
Now let's start with the documentation...
The BeerMon is another kind of monitor compared to those of the past like
C-monitor, Amon, etc. He is a monitor of the nasty type because he makes no
use of any library, device or even Kickstart stuff, in fact you may rip out
the Kickstart ROM once the BeerMon is running. The BeerMon includes a full
screen editor which is of use in most cases. So if you got the taste of gore
now here's the most important thing. If you build the hardware add-on which
is described in the schematics you are able to break any program just with
reset and you are able to access any byte of memory untouched. This works
because the hardware contains expansion memory in which backup of workspace
memory is moved. Into this memory expansion the monitor can be loaded by
executing the "init"-command on this disk. If you aren't able to build this
board (blame on you), you could also use the BeerMon with in some cases
reduced capabilities. The executable is completely position independent
and may be started just by JMPing to the startaddress to which he has been
loaded. Or you set this funky bus error vector at $8 with the exception
entry of the BeerMon and the magic button (see schematics) brings you to
paradise. Well, this should only be a hint how to be more powerful than
only starting the BeerMon from CLI, which is also possible but not the most
advanced and consistent method. Note the fact, that the BeerMon has never
been designed for CLI usage and therefor may have some disadvantages when
you return to the CLI. So the choice is yours...
························· SUMMARY OF CHANGES ······························
- CHANGES made until V0.46c (jun 1993)
- added support for different display modes. Currently the following modes
may be selected:
Name [dimensions] vert.freq. hor.freq. requirements
- PAL [640×256] 50Hz 15KHz -
- PAL [640×512] 50Hz 15KHz -
- NTSC [640×200] 60Hz 15KHz -
- NTSC [640×400] 60Hz 15KHz -
- VGA [640×480] 60Hz 31KHz ECS Agnus&Denise, VGA Monitor
- removed a bug in the soundplay interrupt routine, which crept into V0.45.
- BMPE updated to V0.14 using GadToolsBox 2.0
- redesigned 'Mode' cycle gadget.
- the cycle gadgets now behave the standard way (thanx to Fakebuster :-)
- and yes, finally the complete sourcecode (BMsourcecode.lha) is included!
- CHANGES made until V0.45 (mar 1993)
- the BeerMon automagically handles ECS/AGA differences. Patching is no
longer needed to obtain a special BeerMon version for AGA chipsets.
- removed an ancient bug in disk drive startup code.
- the disk drive heads are repositioned before leaving the BeerMon.
- removed obsolete check for $aabb at offset 8 of the header when sending
SNES/MD data to Super Magicom copier (as requested by 6Pack .-).
- on startup and after every warmstart ('go' command etc.) the BeerMon code
and static data are checked for modification. If something is wrong a
corresponding message informs you about this situation.
- the command 'S' checks if the file would fit on the current disk and only
saves data, if there is enough free space.
- the internal mfm-routines were optimised and provide faster block and
file operations now.
- added command 'verify' which toggles disk verify on and off.
- all dos-related operations now allow the user to select between retry,
ignore and abort, if a read or write error occured. Please note, that if
a write error disappeares after a retry operation, it's likely that the
defective area of the disk now is within the unused mfm gap and may show
again the next time you attempt to write to this track.
- added command 'custom', which displays a list with addresses and the
corresponding names of the custom chip registers
- fixed BRK instruction in 6502/65SC802/65SC816 assembler and disassembler.
In fact this is a 2-byte instruction with immediate byte operand now.
Note that on the 6502 this was just a 1-byte instruction.
- implemented 'reserved' instruction $42 of 6502/65SC802/65SC816 assembler
and disassembler as 'wdm' with immediate byte operand. That's how it was
described in a textfile I recently read.
- the 6502/65SC802/65SC816 disassembler now comments the special SNES
hardware registers.
- the exception handler now knows about additional MC68040 stack frames.
- added commands 'settt0', 'settt1', 'settc', 'setsrp', 'setcrp', 'setdrp'
and 'setmmusr' to support immediate changes to the MMU configuration, if
either a MC68851 or a MC68030 MMU is available. The command 'mmu' now
reports the current configuration instead of the values of startup time.
the following changes were proposed by Kelly van Vliet from Holland:
- 'cop' command added, which searches for copperlists.
- 'imp' and 'exp' commands added, which crunch and decrunch memory using the
well known 'imploder'-algorithm. The file "explode.S" on this disk
represents the decruncher's sourcecode, which you may use for your own
purposes.
- the prompt '>' can no longer be deleted using the backspace key
- in disassembly, instructions which cause an unconditional change of
program flow (bra, jmp, rte, rts, rtm, rtd, rtr) are followed by a
separating line
- 'type' command added, which allows viewing textfiles without having to
load them to a specified memory address. The cursor advances to the
beginning of the next line, if a line feed ($0A) occured, or the end of
the line was reached. Text output can be canceled using the ESC-key and
does not advance, as long as the right mousebutton is pressed.
- the keyfunction shift-cursorright no longer puts the cursor into the last
column. Now the cursor is moved behind the last character of the current
line or right behind the instruction, if disassembly is active.
- the BeerMon now is entirely position independent. For that reason the
relocation procedure is no longer needed. As a result, the exception
entry point is now located $16 bytes behind the regular entry point.
Of course you may still find the tool 'hunkwizard' useful to remove the
hunkstructure of the executable file.
- the function keys no longer add a return character to the end of a
string. If you define a function key using the command 'K' or the
preferences editor BMPE and want a return at the end of a string, you
now have to supply a trailing '|' character.
- the command 'K' has been redefined to allow both " and ' to specify the
string. As a result you may include strings embedded in "" withing a
function key definition (e.g. K F1 'f 0 80000 "DEFJ"').
- the command '?' now accepts string parameters of 1 to 4 characters
length, which are embedded in either "" or '' quotes. The ASCII notation
of the result is also reported.
- added command 'fmode' which selects the way, results of the commands 'c'
and 'f' are reported. Possible modes are table (as in the past), hexdump
or ASCII dump.
- added commands 'bin', 'binw', 'binl', 'bint', 'binq' for binary dump with
8, 16, 32, 48 or 64 bits per line. As usual the dump can be edited.
- the key combination shift-Ins (key "0" on numeric pad) toggles between
overwrite mode and insert mode
- added command 'match' for displaying and clearing a 100-entry
matchbuffer. This matchbuffer contains the resulting addresses of the
search and compare commands.
- in disassembly, the address of a instruction is highlighted in the
following cases:
- a breakpoint is defined at this address.
- a search or compare command succeeded within this instruction, the
result is part of the matchbuffer.
- fixed mouse-blanking bug within the command 'bpl'.
- the command 'info' now also reports how many bytes may be saved on the
current disk (which depends on the selected filesystem).
- BMPE updated to V0.13 using GadToolsBox 1.4
- removed AGA modes from 'Mode' cycle gadget; they became obsolete.
- added checkbox for toggling disk verify.
- now reflects the modified function key defaults.
- added workbench startup code, it may be started by icon now.
- previous preferences files may be used without changes.
- CHANGES made until V0.44 (oct 1992)
- BMPE updated to V0.12 using GadToolsBox 1.4
- cycle gadgets work with OS3.0, too.
- added STD/AA chipset selection to the 'Mode' cycle gadget.
- preferences file format remains unchanged.
- added support for the A4000 AA chipset. Due to the differences in
copperlist definitions, the BeerMon executable must be patched using the
BMPE tool. The distributed version is set up in standard (including ECS)
mode. If you are lucky to own AA chips, you must select one of the AA
modes using the 'Mode' cycle gadget. If you use the ECS mode of the AA
chipset, you must use a BeerMon, which has been set up for the standard
chipset, of course.
- redefinded the meaning of "FORCE PAL" and "FORCE NTSC" in BMPE:
Both modify the BeamCon0 register of the AGNUS chip, which is vital one
if you normally use a mode with a horizontal scan rate other than 15KHz,
like e.g. productivity mode. The contents of this register can't be
read out, which resulted in a disastrous display, when you left the
BeerMon, because the scan rate remained at 15 KHz. Now the BeerMon does
some magic stuff, tickeling intuition to rewrite BeamCon0 after leaving
the BeerMon and going back to the shell. In the "AUTO" modes, BeamCon0
isn't modified at all, so this one doesn't need this "magic", but is
unsuitable for scan rates other than 15KHz. So ONLY use one of the
"FORCE" modes, if your WB is configured in a mode, other than PAL or
NTSC.
- fixed detection of MC68040
- improved handling of MC68040 copyback mode
- on the A3000 and A4000 the GARY chip is now set up for DSACK-timeout, so
you won't get any BUS error exceptions, when you access unpopulated
memory locations, like you do outside the BeerMon. When leaving the
BeerMon, the previous state is restored.
- added movement in disassembly, hexdumps, ASCII dumps and copper dumps in
whole screen pages using shift-cursorup and shift-cursordown keys.
- added 'famiplay' command which transfers organised binary data to a Super
Magic Drive console copier connected to the parallel port. See cable
wiring at the end of this file.
- changed 'ramsey' command to include chip version info (A3000/A4000 only).
- added 'gary' command which reports information on the GARY chip
installed (A3000/A4000 only).
- added MC68040/68881/2 floating point instructions to disassembler.
refer to the file M68881.asm for further information on these:
- FMOVE.f <ea>,FPn
- FSMOVE.f <ea>,FPn
- FDMOVE.f <ea>,FPn
- FMOVE.f FPm,FPn
- FMOVE.f FPn,<ea>
- FMOVE.P FPn,<ea>{#k}
- FMOVE.P FPm,<ea>{Dn}
- FMOVE.L FPcr,<ea>
- FMOVE.L <ea>,FPcr
- FMOVEM.X Dn,<ea>
- FMOVEM.X <ea>,Dn
- FMOVEM.X list,<ea>
- FMOVEM.X <ea>,list
- FMOVEM.L creglist,<ea>
- FMOVEM.L <ea>,creglist
with k being a signed factor in the range -64..63.
with Dn being any data register.
with FPcr being one of the FPU control registers: FPCR, FPSR, FPIAR.
with list being a combination of FPU data registers FPn separated by "/"
or "-".
with creglist being a combination of FPU control registers FPCR, FPSR,
FPIAR separated by "/".
with FPm, FPn being any floating point register.
with f being one of b, w, l, s, d, x, p in <ea>-mode and b, w, l, s in
register mode.
- CHANGES made until V0.43 (aug 1992)
- split up 'C' command into bitsum, bootsum, datasum and kicksum commands
- added 'megasum' command, which calculates checksums of Sega Megadrive ROM
images
- added 'famisum' command, which calculates checksums of Famicon ROM images
and reports some information on the ROM image.
- added 'smdplay' and 'rawplay' commands which transfer organised and raw
binary data to a Super Magic Drive console copier connected to the
parallel port. See cable wiring at the end of this file.
- added 'smd2raw' command which converts Super Magic Drive data to raw
binary data
- added complete 6502/65SC802/65SC816 assembler and disassembler for those
who are interested in the machinecode of the SNES/Super Famicon game
console. Disassemble the file 'G65816' using the 'u' command to view all
possible instructions of these CPUs.
CHANGES made until V0.42 (july 1992)
- added support for the HD-compatible disk drive Chinon FB357A, which is
used in recent A3000 models. If such a drive is detected, all standard
DD disks inserted are treated as before, while HD disks are handled
with twice the standard number of sectors per track. All disk-related
commands like 'format', 's' and 'S' take care of this difference. As a
side effect, the internal disk-DMA buffer constantly is twice as big as
before.
- the 'M' command has been redesigned to allow the HD bitmap information to
fit also on a NTSC screen. The disktype,filesystem and diskinformation
previously reported by this command can now accessed with the new 'info'
command.
- the disassembler now supports the complete set of <ea>-addressing modes.
Located on this disk is a file named NewModes.asm, which shows most of
the additions. Here is a small excerpt:
- move.l ([address16,pc],Rn.s*k,od.w),Dn
- move.l ([address16,pc],Rn.s*k,od),Dn
- move.l ([address32,pc],Rn.s*k,od.w),Dn
- move.l ([address32,pc],Rn.s*k,od),Dn
- move.l ([address16,zpc],Rn.s*k,od.w),Dn
- move.l ([address16,zpc],Rn.s*k,od),Dn
- move.l ([address32,zpc],Rn.s*k,od.w),Dn
- move.l ([address32,zpc],Rn.s*k,od),Dn
- move.l ([id.w,An],Rn.s*k,od.w),Dn
- move.l ([id.w,An],Rn.s*k,od),Dn
- move.l ([id,An],Rn.s*k,od.w),Dn
- move.l ([id,An],Rn.s*k,od),Dn
- move.l ([address16,pc,Rn.s*k],od.w),Dn
- move.l ([address16,pc,Rn.s*k],od),Dn
- move.l ([address32,pc,Rn.s*k],od.w),Dn
- move.l ([address32,pc,Rn.s*k],od),Dn
- move.l ([address16,zpc,Rn.s*k],od.w),Dn
- move.l ([address16,zpc,Rn.s*k],od),Dn
- move.l ([address32,zpc,Rn.s*k],od.w),Dn
- move.l ([address32,zpc,Rn.s*k],od),Dn
- move.l ([id.w,An,Rn.s*k],od.w),Dn
- move.l ([id.w,An,Rn.s*k],od),Dn
- move.l ([id,An,Rn.s*k],od.w),Dn
- move.l ([id,An,Rn.s*k],od),Dn
with address16 being an address which can be reached using 16 Bit offset
with address32 being an address using 32 Bit offset
with id and od being values in 16 or 32 Bit format
with Rn.s*k being either an address- or a data register of either word or
longword size and scaled with the optional scale factor of 2,4 or 8.
NOTE:zpc represents a programcounter which is assumed to be 0 for the
address calculation. Each item inside the outer brackets can be omitted
to create a new addressing mode like e.g.:
- move.l ([address16,pc]),Dn
- move.l ([An],Rn.s*k),Dn
- move.l ([]),Dn
NOTE:because of the obvious complexity of these modes and the parsing
code needed, the assembler doesn't support them until major rework is
done. Besides you are advised to get yourself the Programmers Reference
Manual M68000PM/AD from a Motorola distributor. This unique manual
gives many informations on the MC68000/68010/68020/68030/68040/68851 and
MC68881/68882 instructions. Possibly you'll enjoy the MC68030UM/AD User
Manual as well, because it contains complete informations on all
addressing modes.
- added CPU32 instructions to assembler and disassembler:
- BGND
- LPSTOP #value
- TBLU.s Dm:Dn,Dx
- TBLUN.s Dm:Dn,Dx
- TBLS.s Dm:Dn,Dx
- TBLSN.s Dm:Dn,Dx
- TBLU.s <ea>,Dx
- TBLUN.s <ea>,Dx
- TBLS.s <ea>,Dx
- TBLSN.s <ea>,Dx ;s=b/w/l
NOTE: CPU32 is an universal CPU core compatible to the MC680x0 family,
which gets used in the MC683xx controller series.
- added MC68040 instructions to assembler and disassembler:
- PFLUSHN (An)
- PFLUSHAN
- MOVE16 (address),(An)
- MOVE16 (address),(An)+
- MOVE16 (An),(address)
- MOVE16 (An)+,(address)
- added MC68040/68881/2 floating point instructions to disassembler.
refer to the file M68881.asm for further information on these:
- FABS.f op1 FSABS.f op1 FDABS.f op1
- FACOS.f op1
- FADD.f op2 FSADD.f op2 FDADD.f op2
- FASIN.f op1
- FATAN.f op1
- FATANH.f op1
- FCMP.f op2
- FCOS.f op1
- FCOSH.f op1
- FDIV.f op2 FSDIV.f op2 FDDIV.f op2
- FETOX.f op1
- FGETEXP.f op1
- FGETMAN.f op1
- FINT.f op1
- FINTRZ.f op1
- FLOG10.f op1
- FLOG2.f op1
- FLOGN.f op1
- FLOGNP1.f op1 (Devpac V3.02 has a bug here)
- FMOD.f op2
- FMUL.f op2 FSMUL.f op2 FDMUL.f op2
- FNEG.f op1 FSNEG.f op1 FSNEG.f op1
- FREM.f op2
- FSCALE.f op2
- FSGLDIV.f op2
- FSGLMUL.f op2
- FSIN.f op1
- FSINCOS.f <ea>,FPc:FPs FSINCOS.f FPm,FPc:FPs
- FSINH.f op1
- FSQRT.f op1 FSSQRT.f op1 FDSQRT.f op1
- FSUB.f op2 FSSUB.f op2 FDSUB.f op2
- FTAN.f op1
- FTANH.f op1
- FTENTOX.f op1
- FTST.f <ea> FTST.f FPm
- FTWOTOX.f op1
with FPm, FPc, FPs being any floating point register
with op1 being one of: <ea>,FPm - FPm,FPc - FPm
with op2 being one of: <ea>,FPm - FPm,FPc
with f being one of b, w, l, s, d, x, p in <ea>-mode and b, w, l, s in
register mode.
- fixed assembly and disassembly of these instructions:
- PTESTR (An) (Bug in Devpac V3.02)
- PTESTW (An) (Bug in Devpac V3.02)
CHANGES made until V0.41 (may 1992)
- hardware schematics needed some changes: (see HardIFF and HardIFF2)
- 74F138 input G1 must be tied to _R/W instead of R/_W (Thanx Taipan/UFO)
- both pins 30 and 32 of the RAMs should be connected to +5V, as some
static RAMS use pin 30 as a second chip-select input.
- support for international filesystem (new OS2.0 DOSTypes DOS\2 and DOS\3)
added to all filesystem related commands. The following commands have
visibly changed:
- 'format', see commandlist for changes in parameters
- 'install', see commandlist for changes in parameters
- 'M', now also reports the filesystem (not international/international)
NOTE: the BeerMon recognises the filesystem of a disk by examining the
bootblock. Within AmigaDOS (read:outside the BeerMon), DOS\2 and DOS\3
disks can ONLY be used with OS 2.0 or higher.
- completely rewritten clockchip handling, both the standard (A500/A2000)
MSM6242 RS clockchip and the new A3000/A4000 clockchip can be used for
creation date of files and disks, if they are detected and they seem to
be functional. The century leap is also handled, so you may use the
BeerMon until the end of the year 2077 :-)
- presense of a MC68040 is detected
- added MC68040 instructions to assembler and disassembler:
- MOVEC reg,Rn with reg being one of SRP,URP,TC,DTT0,DTT1,ITT0,ITT1
- MOVEC Rn,reg with reg being one of SRP,URP,TC,DTT0,DTT1,ITT0,ITT1
- CINVA mode with mode being one of NC,DC,IC,BC
- CPUSHA mode with mode being one of NC,DC,IC,BC
- CINVP mode,(An) with mode being one of NC,DC,IC,BC
- CPUSHP mode,(An) with mode being one of NC,DC,IC,BC
- CINVL mode,(An) with mode being one of NC,DC,IC,BC
- CPUSHL mode,(An) with mode being one of NC,DC,IC,BC
- MOVE16 (Am)+,(An)+
- PTESTR (An)
- PTESTW (An)
- PFLUSH (An)
- PFLUSHA! (named this way instead of PFLUSHA because of name conflict
with the incompatible MC68851/MC68030-MMU PFLUSHA instruction)
- added MC68851 MMU (only) instructions to assembler and disassembler:
- PVALID An,<ea>
- PFLUSHR <ea>
- PFLUSHS #n,#m
- PFLUSHS Dn,#m
- PFLUSHS reg,#m with reg being either SFC or DFC
- PRESTORE <ea>
- PSAVE <ea>
- PScc <ea>
- PBcc.s address ,s=w/l
- PDBcc Dn,address
- PTRAPcc
- PTRAPcc.s #value ,s=w/l
where cc is one of the MMU conditioncodes:
bs,bc,ls,lc,ss,sc,as,ac,ws,wc,is,ic,gs,gc,cs,cc
- PMOVE mmur,<ea> with mmur being one of PSR,PCSR,CAL,VAL,SCC,AC
- PMOVE <ea>,mmur with mmur being one of PSR,PCSR,CAL,VAL,SCC,AC
- added FPU instructions to assembler and disassembler:
- FBcc.s address ,s=w/l
where cc is one of the FPU conditioncodes:
f,eq,ogt,oge,olt,ole,ogl,or,un,ueq,ugt,uge,ult,ule,ne,t
sf,seq,gt,ge,lt,le,gl,gle,ngle,ngl,nle,nlt,nge,ngt,sne,st
- changed disassembly of short branches from Bcc.S to Bcc.B, because this
is the official syntax. the assembler accepts both versions.
- 'vc' command parameter handling fixed.
- assembler/disassembler validation sources ported from OMA2.0 assembler to
Devpac V3.02 (because of horrid OMA bugs :-)
- BMPE preferences editor was redesigned with GadToolsBox V1.3, so the
version bumped to V0.11
CHANGES made until V0.40 (march 1992)
- external preferences editor BMPE added, which allows you to define your
personal
- screenmode (PAL/NTSC, Force PAL, Force NTSC)
- colours (back- and foreground RGB values in hexadecimal notation)
- keymap (german or american layout)
- key repeat rate (fast, medium, slow)
- cpu-restrictions (standard or economy, use economy ONLY if you own a
'crippled' CPU MC68EC030 such as the infamous VXL board, which is known
to miss a MMU)
- 10 functionkeys
The settings can be saved and loaded according to the Prefs path you
specify. A modify-function then performs the patching of BeerMon
executables, which are not older than this version V0.40
NOTE: BMPE NEEDS OS 2.0! - the gadtools.library and the GadToolsBox are
too good to be ignored, and it's time to upgrade to OS2.0 anyway :-)
- added patch area to BeerMon, which gets used by BMPE
- the MMU related commands now tell you if you don't have one (just in case
you didn't know it :-)
- 'mmu' command reports DRP contents, if a MC68851 MMU is installed
- added MMU instructions to assembler and disassembler:
- PMOVE DRP,<ea> (MC68851 MMU only)
- PMOVE <ea>,DRP (MC68851 MMU only)
- 'r' command now only reports those registers and flags , which are allowed
with the detected CPU
- occupy and exor commands changed, you now may use o, ow, ol, e, ew or el
according to your intention to use a byte, word or longword argument
- history function now ignores empty commandlines ^ö^ HI
- when aborting the 'fi' function, the current address is reported. " PBA!
- the help key now increments the help page each time it is pressed
- checksum command 'C' now also calculates 256/512 KB kickstart checksums
- 'i' command now shows full $100 bytes of the original vector table.
CHANGES made until V0.39 (february 1992)
- shift-tab keyfunction added, deletes all characters from current cursor
upto the right border
- history has been added: shift-keypad-8/2 (up/down) recalls upto 10 lines
- cursor movement extended: shift-keypad-7/1 (home/end) places cursor in
the first column of the first/last row
- nop command added, it simply sets the specified number of NOP instructions
- mmuon and mmuoff commands added. These allow enabling/disabling of
address translations (so you may examine the A3000 ROM or deactivate other
MMU setups)
BTW:keep your hands of those low cost turboboards using the MC68EC030 or
even the MC68EC040, sooner of later you'll regret that this CPU doesn't
have a MMU!
- finally adding/listing/removing of breakpoints added
- completely rewritten exception handler; now works on MC68000/10/20/30 CPU
and also handles FPU/MMU exceptions
- cls added, clears the screen
- find instruction command added. This allows you searching for special
instructions using the * and ? joker.
Just try something like 'fi fc0000 fc1000 "move*d?,a"'
- MOVE <ea>,SR will be disassembled correctly again.
CHANGES made until V0.38 (january 1992)
- presence of a MC68851 MMU or a MC68030-built-in-MMU is detected
- 'r' command now also explains the CACR settings
- 'R' command added, reports FPU registers in hex and scientific notation
- 'mmu' command added, reports MMU registers and their bit settings
- 'ramsey' command added, (only useful if you have an A3000)
- renamed the 'keymap' command back to 'k', someone really seems to use it :-)
- fixed a V0.36+ bug: 'x' easily crashed on machines without MC68030
- effective address info ('dv') no longer ignores index scaling
- FDxx Dx,label displacement bug fixed (another bug in OMA2.0)
- added FPU instructions to assembler and disassembler:
- FNOP
- FMOVECR #m,FPn with m being one of 0,$b-$f,$30-$3f
- added MMU instructions to assembler and disassembler:
- PMOVE mmur,<ea> with mmur being one of SRP,CRP,TT0,TT1,TC,MMUSR
- PMOVE <ea>,mmur with mmur being one of SRP,CRP,TT0,TT1,TC,MMUSR
- PMOVEFD <ea>,mmur with mmur being one of SRP,CRP,TT0,TT1,TC
- PFLUSH #n,#m
- PFLUSH Dn,#m
- PFLUSH reg,#m with reg being either SFC or DFC
- PFLUSHA
- PLOADR #n,<ea>
- PLOADW #n,<ea>
- PTESTR #n,<ea>,#m,An
- PTESTW #n,<ea>,#m,An
- lowmem for workspace and hunk-copymem routine moved from $c0 to $100 to
allow handling of FPU and MMU traps in a future version
- if EXEC isn't corrupted, any even VBR value is allowed
NOTE:you MUSTN'T change VBR within a routine executed with 'g'
NOTE:if you change the VBR with 'r', it won't be set until 'g' is used
- fixed bug in resident list display (/9), occured if bit 31 was set.
- on startup, the completion of the current blitter operation is waited for.
CHANGES made until V0.37 (december 1991)
- the OS2.0 hardlink feature is now fully supported with both OFS and FFS.
hardlinks and dirlinks are reported when using the 'dir' command.
the commands 'cd','del','L' work with and without links in the usual way.
- Workspace and BackupMem allocation procedure has been changed due to
popular demand. Don't miss reading the decription of the 'W' command.
- finally the BeerMon both works on PAL and NTSC Amigas. The NTSC mode is
derived from bit 12 of VPOSR, so the agnus jumper is considered and not
the BeamCon0 settings.
- the presence of 1.5 MB graphics memory is detected, which is a possible
configuration on the A500 plus.
- the presence of a FPU and its type (MC68881/2) is reported
- fixed bug where 'dir f' reported hashchainkey instead of the
fileheaderextension key.
- exit function 'X' now clears the Chip memory, because the OS2.0 doesn't
do it anymore. The fillvalue is $ffffffff.
- CloseLibrary-bug in OS2.04 bootblock removed.
CHANGES made until V0.36 (november 1991)
- fixed bug in ASCII-edit part of the 'm' function
- fixed filesystem bug (fileheaderextension blocks were not 'official' style)
- renamed some ECS registers (the new hardware reference manual is out now :-)
- relaxed CIA timing values (any A1000ers out there with MatsuShit(a) drive?)
- major assembler/disassembler update from old Motorola syntax to new one
quick docs: offset(An) changed to (offset,An)
offset(An,Rm.s) changed to (offset,An,Rm.s) ,s=w/l
address(PC) changed to (address,PC)
offset(PC,Rn.s) changed to (address,PC,Rn.s) ,s=w/l
address changed to (address)
address.w changed to (address).w
- scaling now is possible: (address,An,Rm.s*k) ,k=1,2,4,8
- added FPU instructions: FDBcc Dx,address FRESTORE <ea>
FSAVE <ea> FTRAPcc FTRAPcc.s #value ,s=w/l
FScc <ea>
where cc is one of the FPU conditioncodes:
f,eq,ogt,oge,olt,ole,ogl,or,un,ueq,ugt,uge,ult,ule,ne,t
sf,seq,gt,ge,lt,le,gl,gle,ngle,ngl,nle,nlt,nge,ngt,sne,st
- disassembler suppresses leading 0's (e.g. '4' instead of '$0000004')
- moved column of disassembler operands ('ftrapngle.l #k' looks so nice :-)
- now detects and supports MC68000/10/20/30
- vbr,sfc,dfc,msp,cacr,caar are handled correctly if they are available
(vbr should remain 0 until the ultimate solution has been figured out)
- support for A2000A clockchip ($d80000) had to be removed, because it
trapped on my A3000
- no more interference of backupmem-search with CPU data caching
- support for 2MB chipmem. if available, the screen defaults to $1f4000
- cleaned up grabbing of the system a bit and the return to CLI a bit more.
(but you still shouldn't use it with enforcer :-)
- improved mouse-acceleration in memory view mode ('b')
- power-led blink removed (wasn't that difficult...)
- the reset command ('X') now works with Kick 1.2/1.3/2.04
CHANGES made since V0.28 (june 1990) upto this version 0.35 (oct 1991)
- the BeerMon status is now: (C) by Carnivore/BeerMacht, but FREEWARE.
- dramatic increase in scrolling speed
- finally debugged 'del' function
- minor debugging of (dis)assembler
- diskroutines now use timer instead of delay loops.
- FastFileSystem and OldFileSystem support for disks
- Copper-assembler/disassembler with symbolic ECS registers
- text-snapping with right mousebutton
- second screen, swapping with 'shift-help'
- a help-function with 'help'
- added MC68010 instructions
NOTE: currently on startup the VBR register MUST be set to zero (default).
So don't use a 'MoveVBR'-type programm. The new registers are currently
ignored, if you execute a program. You need to set them by yourself
(e.g. MOVEC a0,vbr)
- added MC68020 instructions (currently without extended <EA> and
coprocessor instructions). Disassemble the file 'DemoCode' to get an
idea of it. The sourcecode to 'DemoCode' is part of this distribution.
- added 32 bit support for most functions
- invalid syncs are reported
- syncs can be determined (or guessed?)
- format and install commands added
- time and date infos are set when using format, save
- start and endaddress are saved as a filecomment and are shown using the
dir command. So typing 'L' + return loads the file to the propper address.
- more info is given using the 'dir f' command
- scrolling backwards is added, usefull in disassembly (CPU/Copper) and the
memory dump commands
- nice pic on startup (well, it uses no valueable ram, it's my DMAbuffer :-)
- the code grew more and more, therefor a complete new hardware design, now
offering 256 KB of static memory.
With it $BFDxxx, $BFExxx and $DFFxxx register values appear at $F3Dxxx!
BeerMon may support this feature some day.
- on reset-entry, available Zorro-II(I) boards can be configured with the
config command (well, there is still no HD-support, should I add the
ability to use AMAX-HDdrivers? Uummmphh, not now ;-)
- Bcc.L (MC68000) has been changed to Bcc.W (because .L implies the MC68020+
32 bit offset branches)
- the sourcecode isn't part of this distribution anymore, portions of it
may or may not be released, if someone asks me for it.
and more to mention, but I'm a bit lasy... so wait for the next update
(more frequent than in the past) and spend me some beer if we happen to
meet :-)
···········································································
now some general notes about the BeerMon...
the mouse: enables you to set the cursor (left mousebutton). Pressing
the right mousebutton stops any textoutput on screen, until
it is released again. If you press the right mousebutton
when no function is activated, the string below the
mousepointer is copied to the current cursor position.
escape key: aborts any command (even load/save...)
tab key: sets the cursor to next item of data in a block (skips
spaces, is useful in directory and hexdump).
shift-tab deletes all characters between the current cursor position
and ending with the last column.
help key: a brief command summary, pressing it multiple times advances
the page.
shift-help swap screens 1 and 2
backspace behaves as usual
shift-backspace clears screen del behaves as usual shift-del inserts spaces
shift-keypad-8 goes backwards inside the history buffer. The history depth
is 10 lines.
shift-keypad-2 goes forwards inside the history buffer
shift-keypad-0 toggles between overwrite mode and insert mode
shift-cursor moves the cursor to the limit of the selected direction, with
the exception of shift-cursorright, where the cursor is
placed behind the last character of the current line.
if the cursor has already been at the upper or lower limit,
the following commands are executed in pagemode:
ASCII dump, hex dump, binary dump, copper dump, MC680x0
and 6502/65SC802/65SC816 disassemblers.
shift-keypad-7 moves the cursor to the first column of the first row
shift-keypad-1 moves the cursor to the first column of the last row
muliate: the standard mode which you usualy would enter, without
freezing.
freezing: is in work, not yet finished, but seems to become funky.
the display: currently in pal, but there will be other options in future.
the keymap: defaults to german keymap, but can be changed with "k"
CPU: currently MC68000/10/20/30/40 are tested, the MC68010+ might
get useful in future due to the vector base capability to
trick some protections vomiting on the those pointers around
$000xxx (full tracing of every prg may become possible).
agnus: new angus chip is recognized and may be used with 1, 1.5 or
2MB chip memory (-> play sound, workspace).
well, now we come to the command list, < > means optional parameter(s)...
-----------------------------------------------------------------------------
m <addr1> <addr2>
gives a hexdump as well as display in ASCII of specified or following
memory locations. Both can be edited using the cursor.
a <addr1> <addr2>
gives a display of specified or following memory locations in ASCII.
This can easily be edited using the cursor.
bin <addr1> <addr2>
gives a binary dump with 8 bits per line of specified or following
memory locations. This can easily be edited using the cursor.
binw <addr1> <addr2>
gives a binary dump with 16 bits per line of specified or following
memory locations. This can easily be edited using the cursor.
binl <addr1> <addr2>
gives a binary dump with 32 bits per line of specified or following
memory locations. This can easily be edited using the cursor.
bint <addr1> <addr2>
gives a binary dump with 48 bits per line of specified or following
memory locations. This can easily be edited using the cursor.
binq <addr1> <addr2>
gives a binary dump with 64 bits per line of specified or following
memory locations. This can easily be edited using the cursor.
? value <operation value> <operation value> <...>
returns the result of a calculation. If there is no preceeding
character, "value" is interpreted as a hexadecimal value. If the
preceeding character is a '#', the value is interpreted as a decimal
value. If "value" is embedded in either "" or '' quotes, it is
interpreted as an ASCII parameter. The operations can be one of the
following:
+ add to
- subtract
* multiply by
/ divide by
! or with
& and with
= exor with
< shift left "value" times
> shift right "value" times
The result is returned as a hexadecimal, decimal and binary values and
in its ASCII representation.
c addr1 addr2 addr3
compares the memory beginning with "addr1" and ending with "addr2"-1
with the memory locations starting at "addr3". The result is a list of
all memory locations which are different.
The address of such a memory region will be stored in the matchbuffer,
as long as there is a free entry.
t addr1 addr2 addr3
tranfers the memory beginning with "addr1" and ending with "addr2"-1
to the memory locations starting at "addr3"
imp addr1 addr2 <mode>
compresses the memory region beginning with "addr1" and ending with
"addr2"-1. The parameter "mode" in the range from 0 to b selects the
implode quality, which influences the time needed for operation. If no
parameter "mode" is specified, a default mode "0" is used. While
imploding a progress indicator shows the number of bytes to go and the
bytes which were already saved. Imploding can be aborted by pressing
the "esc"-key. If the memory region cannot be imploded, a message will
be given. After imploding the total number of saved bytes and the
location of the imploded data is reported. Please note that this
command always modifies the specified memory region.
exp addr
decompresses the memory region beginning with "addr", if seems to
contain valid imploded data. After exploding the location of the
exploded data is reported. If you want to use imploded data for your
own purposes, you may use the sourcecode named "explode.S" on this disk.
nop addr num
fills the memory beginning with "addr" with the specified number "num"
of NOP instructions ($4E71).
o addr1 addr2 byte
fills the memory beginning with "addr1" and ending with "addr2"-1
with the specified one-byte value "byte".
ow addr1 addr2 word
fills the memory beginning with "addr1" and ending with "addr2"-1
with the specified two-byte value "word".
ol addr1 addr2 long
fills the memory beginning with "addr1" and ending with "addr2"-1
with the specified four-byte value "long".
e addr1 addr2 byte
performs an exor operation with the memory beginning with "addr1" and
ending with "addr2"-1 using the specified one-byte value "byte".
ew addr1 addr2 word
performs an exor operation with the memory beginning with "addr1" and
ending with "addr2"-1 using the specified two-byte value "word".
el addr1 addr2 word
performs an exor operation with the memory beginning with "addr1" and
ending with "addr2"-1 using the specified four-byte value "long".
f addr1 addr2 byte <byte> <byte> <...>
searches for one to 14 bytes beginning with "addr1" and ending with
"addr2"-1. The result is a list of all memory locations where the
specified byte or sequence can be found.
The address of the sequence will be stored in the matchbuffer, as
long as there is a free entry.
f addr1 addr2 "text"
searches for a text of up to 14 characters length beginning with
"addr1" and ending with "addr2"-1. The result is a list of all memory
locations where the specified text can be found.
The address of the sequence will be stored in the matchbuffer, as
long as there is a free entry.
fmode [0|1|2]
selects the way the results of the commands 'f' and 'c' are
displayed. A parameter '0' selects tabular output of the addresses.
A parameter '1' selects hexadecimal output similar to the command 'm'.
A parameter '2' selects ASCII output similar to the command 'a'.
fi addr1 addr2 "pattern*?"
searches for a fragment of disassembled instructions beginning with
"addr1" and ending with "addr2"-1. An ending '*' joker is obsolete.
Example: if you use the pattern "*q.w*1,(?,?0,d1.w)"
any occurence of these instruction could be shown:
ADDQ.W #1,(2,A0,D1.W) as well as SUBQ.W #1,(9,D0,D1.W)
When the 'fi' function is aborted, the current address is shown.
The address of the instruction will be stored in the matchbuffer, as
long as there is a free entry.
F addr
searches for all conditional branch-instructions relatively accessing
the specified address. Any occurence is shown in disassembled form.
Possible instructions would be:
BEQ.B/W $xx
BRA.B/W $xx
BSR.B/W $xx
DBF Dn,$xx ...
The address of the instruction will be stored in the matchbuffer, as
long as there is a free entry.
F addr pc
searches for all instructions accessing the specified address using
the pc-relative addressing-mode. Any occurence is shown in disassembled
form. Possible instructions would be:
LEA $xx(PC),Ax
JSR $xx(PC)
MOVE.B/W/L $xx(PC),xx ...
The address of the instruction will be stored in the matchbuffer, as
long as there is a free entry.
p addr1 addr2 <period>
plays DMA-sound using the chip memory locations beginning with
"addr1" and ending with "addr2". The current address of the sound DMA
is shown while playing the sound. If no period is specified a period of
$100 is used. The length of sounddata to be played is not limited to
128 KB.
r <register value>
displays current CPU-register contents and flags if no parameters are
given. Only those registers and flags which are valid for the installed
cpu are shown. If register and value are specified the register is
modified accordingly. Possible registers are:
D0 - D7
A0 - A7
VBR (new with MC68010 - shouldn't be changed without reason)
SFC (new with MC68010)
DFC (new with MC68010)
CACR (new with MC68020, extended with MC68030 - see note)
CAAR (MC68020 and MC68030 only)
USP
ISP (formerly SSP on MC68000)
MSP (new with MC68020 - note, that EXEC doesn't initialize this one)
SR (extended with MC68020) - see note)
note: SR explanation (MC68000+)
680x0 bit - function
0 #15 - T1, Trace 1
2 #14 - T0, Trace 0
0 #13 - S, Supervisor Stackpointer
2 #12 - M, Master Stackpointer
0 #10 - \
0 ..#8 - / Interrupt Mask
0 #4 - X, Extend Flag
0 #3 - N, Negative Flag
0 #2 - Z, Zero Flag
0 #1 - V, Overflow Flag
0 #0 - C, Carry Flag
note:CACR explanation (MC68020)
bit - function
#3 - CI, Clear Instruction Cache \
#2 - CEI, Clear Entry in Instruction Cache /reads back 0
#1 - FI, Freeze Instruction Cache
#0 - EI, Enable Instruction Cache
note:CACR explanation (MC68030)
#13 - WA, Write Allocate (should be set)
#12 - DBE, Data Burst Enable
#11 - CD, Clear Data Cache \
#10 - CED, Clear Entry in Data Cache /reads back 0
#9 - FD, Freeze Data Cache
#8 - ED, Enable Data Cache
#4 - IBE, Instruction Burst Enable
#3 - CI, Clear Instruction Cache \
#2 - CEI, Clear Entry in Instruction Cache /reads back 0
#1 - FI, Freeze Instruction Cache
#0 - EI, Enable Instruction Cache
note:CACR explanation (MC68040)
#31 - DE, Enable Data Cache
#15 - IE, Enable Instruction Cache
R
displays current FPU-register contents. Reported are:
FP0 - FP7 in 96(80) bit extended real notation. Signed scientific
notation with SNAN/NAN/INFINITY is also reported, if a
FPU MC68881/2 is installed.
FPCR exception mask, mode control
bit - function
#15 - BSUN, Branch/Set on UNordered
#14 - SNAN, Signalling Not A Number
#13 - OPERR, OPerand ERRor
#12 - OVFL, OVerFLow
#11 - UNFL, UNderFLow
#10 - DZ, Divide by Zero
#9 - INEX2, INEXact operation
#8 - INEX1, INEXact decimal input
#7 - \ 0 0 1
#6 - /PRECision 0 eXtended 1 Single 0 Double
#5 - \ 0 0 1 1
#4 - /RND, round 0 Next 1 Zero 0 Minus 1 Plus
FPSR condition code,quotient byte,exception,accrued exception
bit - function
#27 - N, Negative
#26 - Z, Zero
#25 - I, Infinite
#24 - NAN, Not A Number
#23 - S, quotient Sign
#22 - Q, Quotient
... #16 - byte (7 least significant bits)
#15 - BSUN, Branch/Set on UNordered
#14 - SNAN, Signalling Not A Number
#13 - OPERR, OPerand ERRor
#12 - OVFL, OVerFLow
#11 - UNFL, UNderFLow
#10 - DZ, Divide by Zero
#9 - INEX2, INEXact operation
#8 - INEX1, INEXact decimal input
#7 - IOP, Invalid OPeration (BSUN|SNAN|OPERR)
#6 - OVFL, OVerFLow
#5 - UNFL, UNderFLow (UNFL|INEX2)
#4 - DZ, Divide by Zero
#3 - INEX, INEXact operation (INEX1|INEX2|OVFL)
FPIAR floating point instruction address register
mmu
displays current MC68851/68030 MMU-register contents. Reported are:
TT0,TT1 - Transparent Translation
bit - function
#31 - \
... #24 - /LAB, Logical Address Base
#23 - \
... #16 - /LAM, Logical Address Mask
#15 - E, Enable
#10 - CI, Cache Inhibit
#9 - R/W, Read/Write
#8 - RWM, Read/Write Mask
#6 - \
... #4 - /FC, Function Code
#2 - \
... #0 - /FCM, Function Code Mask
TC Translation Control
bit - function
#31 - E, Enable
#25 - SRE, Supervisor Root Enable
#24 - FCL, Function Code Lookup enable
#23 - \
... #20 - /PS, Pagesize (¼..32KB)
#19 - \
... #16 - /IS, Initial Shift (0..15)
#15 - \
... #12 - /TIA, Table Index A (1..15)
#11 - \
... #8 - /TIB, Table Index B (0..15)
#7 - \
... #4 - /TIC, Table Index C (0..15)
#3 - \
... #0 - /TID, Table Index D (0..15)
(DRP - Dma Root Pointer, MC68851 MMU only)
CRP,SRP - Cpu, Supervisor Root Pointer
bit - function
#63 - L/U, Lower/Upper limit
#62 - \
... #48 - /LMT, Limit
#33 - \
... #32 - /DT, Descriptor Type
#31 - \
....#4 - /TA, Table Address
MMUSR - MMU Status Register
bit - function
#15 - B, Bus error
#14 - L, Limit error
#13 - S, Supervisor only
#11 - W, Write protected
#10 - I, Invalid
#9 - M, Modified
#6 - T, Transparent translation
#2 - \
... #0 - /N, Number of levels
ramsey
displays current RAMSEY configuration (A3000/A4000 only).
Reported are:
Page Detect Mode:(on/off)
Burst Mode:(on/off)
Burst Wrap Mode:(on/off)
Chips onboard:(256KBit*4/1MBit*1/1MBit*4/4MBit*4)
Refresh Rate:(154/238/380/off)cycles
Ramsey Version:($0d/$0e)
gary
displays current GARY configuration (A3000/A4000 only).
Reported are:
Timeout:(disabled/Bus Error/DSACK)
Keyboard Reset Enable:(on/off)
Gary Version ID:($00/$90)
bs addr
adds a memory location to the list of breakpoints, if the location
specified is even, hasn't been set yet and if it is a valid RAM
location. Breakpoints may also be placed in MMU-protected RAM, but not
in ROM. Up to 10 breakpoints at one time are possible.
bl
shows the breakpoint locations in disassembly.
bc addr
removes a specified memory location from the list of breakpoints. If
the parameter 0 is used, all breakpoints will be removed.
g addr
executes a subroutine at the specified memory location. The
CPU/MMU/FPU-registers are set before execution and the resulting
register contents are displayed after the execution. All CPU/MMU/FPU-
exceptions are controlled and the memory location where it occured is
displayed. Take care, that the active stackpointer doesn't trash important
data. Before the execution the specified breakpoint locations are
prepared and available CPU cache is cleared (not disabled!). After the
execution the previous instructions will be restored. When an exception
occurs, the stackpointer is corrected, so executing
lea ($40000),a7
illegal
results in the expected register display, though the code has been
started via 'JSR'.
mmuoff
disables the MMU (if you are lucky to own one :-). This affects all
memory operations like viewing, editing, disassembling, saving - but NOT
program execution, which uses the MMU setup, visible with 'mmu'. With
this command you may e.g. examine the A3000 built-in alpha ROM or change
MMU-protected RAM). If you don't have a MMU, you will be told.
mmuon
enables the MMU. If the current MMU setup is mangled, or has never
been initialised this could result in a MMU exception. If you don't
have a MMU, you will be told.
settt0 value
this command places the specified value into the TT0 register of the
MMU. This may cause disastrous crashes if you don't know what you're
doing. If you don't have a MMU, you will be told.
settt1 value
this command places the specified value into the TT1 register of the
MMU. This may cause disastrous crashes if you don't know what you're
doing. If you don't have a MMU, you will be told.
settc value
this command places the specified value into the TC register of the
MMU. This may cause disastrous crashes if you don't know what you're
doing. If you don't have a MMU, you will be told.
setsrp value1 value2
this command places the specified values into the SRP register of the
MMU. This may cause disastrous crashes if you don't know what you're
doing. If you don't have a MMU, you will be told.
setcrp value1 value2
this command places the specified values into the CRP register of the
MMU. This may cause disastrous crashes if you don't know what you're
doing. If you don't have a MMU, you will be told.
setdrp value1 value2
this command places the specified values into the DRP register of the
MMU. This may cause disastrous crashes if you don't know what you're
doing. If you don't have a MC68851 MMU, you will be told.
setmmusr value
this command places the specified values into the MMUSR register of
the MMU. This may cause disastrous crashes if you don't know what
you're doing. If you don't have a MMU, you will be told.
x
exits the monitor. If the monitor has been invoked from CLI, he
returns to it. If the monitor is located in the module a reset is
performed. If the monitor is invoked by a freeze mechanism, the freezed
program is continued.
X
exits the monitor and performs a complete hardware-reset including
clearing of the memory.
B rgb1 rgb2
changes the background and foreground colors of the display.
W <addr>
displays the current workspace locations if no parameter is
specified. In case a parameter is specified and there is backup memory
either in the module or in special memory areas, the workspace is
changed to the specified chip memory location. The previous memory
locations used as a workspace are restored using the backupmemory
contents saved while startup. If there is no module installed the
monitor first checks, if execbase checksums are valid. If they are, the
memlist is scanned for a chunk of graphics memory being big enough to
hold the screen and the diskDMAbuffer. The text 'Scr(SYS)' reflects
this case. If none is found or execbase seems corrupted, absolute
memory is used; conflicts of possible code/workspace overlay are
handled correctly. The text 'Scr(ABS)' reflects this case. The above
is valid for exchange memory, too. The corresponding texts are
'Exg(SYS)' and 'Exg(ABS)'. If the chunk in the memlist is more than
big enough, the workspace is placed at the end of it. Currently the
following locations are scanned for memory expansions during startup, if
no chunk of fast memory being big enough is found using the memlist, or
if execbase seems corrupted.
$f00000 $200000 $c00000 $80000
If there is no backup memory found or you pressed right mousebutton
during startup, no backupmemory is used and therefor the original
contents cannot be restored when changing the workspace or exiting.
The workspace memory which is used for screenbitmap and disk drive
DMA-buffers defaults to $74000 in absolute mode, if there is a 8371
agnus. With 1 MB continous ram below $100000 and a big agnus chip, the
workspace defaults to $f4000. With 1.5 MB continous ram below $180000
and a big agnus chip, the workspace defaults to $174000. With 2 MB
continous ram below $200000 and a big agnus chip, the workspace defaults
to $1f4000. If the absolute workspace would overlay with the memory
in which the monitor is located, the absolute workspace is placed just
before the programcode. Keep in mind, that if any absolute memory is
used, returning to the shell is rather risky, because unexpected things
*may* happen.
i
displays the contents of the CPU-exceptionvectors, DMA- and
interrupt-registers determined during startup. The vectors are changed
within the monitor to prevent executed programs from creating any alerts
and gurus.
match <0>
displays the contents of the matchbuffer, if no parameter is
specified. In case of an parameter '0', the matchbuffer is cleared.
d <addr1> <addr2>
disassembles the memory locations beginning with "addr1" and ending
with "addr2"-1 if they are specified. The disassembly can be edited
using the cursor. Instructions, which cause an unconditional change of
program flow are followed by a separating line. If no valid instruction
is given the line is not accepted and not altered in memory. The
address of an instruction, whose address is part of the breakpoint- or
matchbuffer is highlighted.
dm
changes the way offsets are displayed in disassembly between decimal
and hexadecimal form.
ds
changes the way offsets are displayed in disassembly between signed
and unsigned form.
dv
toggles the calculation of the effective address on the right part of
the disassembly. In the worst case of abnormally large instructions
(movem), you may want to toggle this function off. Note that currently
predecrement and postincrement is ignored.
n addr
invokes the built-in MC680x0 line-assembler at the specified address.
The current instruction is displayed.
N addr
invokes the built-in 6502/65SC802/65SC816 line-assembler at the
specified address. The current instruction is displayed.
auto
enables automatic immediate operand size selection for
65SC802/65SC816 instructions. This function is of use in both assembly
and disassembly, because it remembers previous SEP #$xx and REP #$xx
instructions. Note that the functionality depends on a linear flow of
code. The default size is 16 bit for accumulator and index registers.
accu [8|16]
forces accumulator immediate operand size to either 8 or 16 bits and
disables automatic immediate operand size selection.
index [8|16]
forces index register immediate operand size to either 8 or 16 bits
and disables automatic immediate operand size selection.
u <addr1> <addr2>
disassembles the memory locations in 6502/65SC802/65SC816 mode
beginning with "addr1" and ending with "addr2"-1 if they are specified.
The instrucions are shown in hexadecimal, mnemonic and ASCII notation.
The effect of SEP #$xx and REP #$xx instruction on immediate opperands
is commented. The special SNES hardware registers are commented, if
they are accessed in absolute and absolute/indexed addressing modes.
The disassembly can be edited using the cursor. If no valid instruction
is given the line is not accepted and not altered in memory.
K <fn "text1|text2...">
defines commands or command sequences to be executed when pressing
one of the function keys. The parameter "fn" may be one between f1 -
f10. The "|" sign results in a return key being written into the input
buffer and is also needed for the last command in a sequence, if you
want it being automatically executed. Both quoting characters " and '
can be used to define the string. If no parameters are specified the
current function key settings are displayed.
D <n>
selects another diskdrive. The parameter "n" may be one between 0
and 3 where 0 corresponds to DF0. The current directory is set to the
root directory. If the specified diskdrive is not available the drive 0
is selected. If no parameter is specified the current diskdrive is
returned.
dir <f>
first reports the name of the disk or the current subdirectory and
the number of free and used blocks. The filelist of the current
directory including the comment and the size in bytes and blocks is
returned. Existing hardlinks are reported with the corresponding object
refered to. Note that linked files and directories do support their own
datestamp, but don't support their own protection bits and file comments
If the option f is given, the time and date of creation, the protection
bits, the file/dirheader key, the fileextension key and the first
datablock key is also returned. If the disk is not a dos disk or if any
other errors occur a corresponding message is returned.
bootsum addr
calculates and sets the checksum of an AmigaDOS bootblock located at
the specified address. The previous and the new checksums are returned.
datasum addr
calculates and sets the checksum of an AmigaDOS datablock located at
the specified address. The previous and the new checksums are returned.
bitsum addr
calculates and sets the checksum of an AmigaDOS bitmapblock located
at the specified address. The previous and the new checksums are
returned.
kicksum addr
calculates and sets the checksum of a kickstart image. The specified
locations are checked to represent a valid kickstart image, and the size
of it is determined (256/512 KB). The previous and the new checksums
are returned.
megasum addr
calculates and sets the checksum of a SEGA Megadrive ROM image. The
specified locations are checked to represent a valid ROM image. The
previous and the new checksums are returned.
famisum addr
calculates and sets the checksum of a SNES (Super Famicon) ROM image.
The specified locations are checked to represent a valid ROM image. The
previous and the new checksums are returned. Additional module
information ist reported.
famiplay addr
transfers the datablock beginning with the specified location to a
Super Magic Drive copier unit connected the parallel port, if it passes
an integrity check. If the unit does not respond in time, a timeout
error is reported. During transfer the current address and the number
of blocks to go is shown. The transfer can be aborted using the escape
key. The datablock represents a SNES (super Famicon) module with Super
Magic Drive header and organisation. Refer to the section near the end for
information on the supported cable wiring.
smdplay addr
transfers the datablock beginning with the specified location to a
Super Magic Drive copier unit connected the parallel port, if it passes
an integrity check. If the unit does not respond in time, a timeout
error is reported. During transfer the current address and the number
of blocks to go is shown. The transfer can be aborted using the escape
key. The datablock represents a SEGA Megadrive module with Super Magic
Drive header and organisation. Refer to the section near the end for
information on the supported cable wiring.
rawplay addr
transfers the datablock beginning with the specified location to a
Super Magic Drive copier unit connected the parallel port, if it passes
an integrity check. If the unit does not respond in time, a timeout
error is reported. During transfer the current address and the number
of blocks to go is shown. The transfer can be aborted using the escape
key. The datablock represents a SEGA Megadrive module in raw binary
format without any headers. Refer to the section near the end for
information on the supported cable wiring.
smd2raw addr
converts the specified datablock in Super Magic Drive format into raw
binary format, if it passes an integrity check. During conversion the
current address and the number of blocks to go is shown. The resulting
data starts with addr and ends with addr+modulesize followed by $200
bytes of memory filled with $55.
v <sync>
changes the syncword for all disk file and track operations to the
specified value. The value is checked for consistency and invalid syncs
are noted, but not ignored. If no parameter is specified the current
syncword setting is returned.
vc <track>
tries to find out the sync marks on the specified track of the
selected drive, or on track 0, if no track is specified.
(NOTE: this function needs major rework...)
l addr cyl <num>
reads the specified number of AmigaDOS cylinders to the specified
memory locations from the selected diskdrive beginning with cylinder
"cyl". If no parameter "num" is specified only one cylinder will be
read. Note the difference between cylinders and tracks: a disk
contains 83 cylinders and 166 tracks. The length of one cylinder is
2 sides * 11 sectors * $200 bytes = $2c00 bytes in DD mode and
2 sides * 22 sectors * $200 bytes = $5800 bytes in HD mode. While
reading tracks a list is displayed reporting which cylinder, head and
sector has just been read to which address. If there is an error which
couldn't be recovered with upto three internal retries for each sector,
the user may select between retry, ignore and abort to handle this
situation.
s addr cyl <num>
writes cylinders to the selected diskdrive.
l addr sec <num> s
reads the specified number of AmigaDOS sectors to the specified
memory locations from the selected diskdrive beginning with sector
"sec". If no parameter "num" is specified only one sector will be read.
s addr sec <num> s
writes sectors to the selected diskdrive.
L filename addr
loads an AmigaDOS file named "filename" and located in the current
directory to the specified address "addr". The filename can be quoted
to include spaces. If the disk has been changed, the current directory
is set to the root directory. While loading the current loadaddress is
displayed. If there is any error a corresponding message is returned.
Both OFS and FFS disks are supported. The OS2.0 link-feature is
supported, too.
S filename addr1 addr2
saves an AmigaDOS file named "filename" into the current direcory.
Saving begins with "addr1" and ends with "addr2"-1. If there is not
enough free space on the current disk, the operation is aborted. While
saving the current saveaddress is displayed. If there is any error a
corresponding message is returned. The time and date information is
set, if there is a clockchip (either A500/A2000 or A3000/A4000 version)
installed and the chip appears functional. Otherwise the the creation
time is reset to 00:00:00 on 01-Jan-78.
type filename
types an AmigaDOS file named "filename" located in the current
directory onto the screen. The filename can be quoted to include
spaces. If the disk has been changed, the current directory is set to
the root directory. If a line feed character ($0A) occurs within
the file, the cursor is put into the first column of the next line.
If there is any error a corresponding message is returned.
cd :
sets the root directory as the current directory.
cd subdir
sets the specified subdirectory named "subdir" as the current
directory. This is only valid for the disk which is currently installed
in the selected diskdrive. Before any file- or dosoperation is done
with a changed disk the current directory is reset to the rootdirectory.
The OS2.0 link-feature is supported, too.
mk subdir
creates a subdirectory named "subdir" in the current directory of the
selected diskdrive.
del "name"
deletes a file named "name" and being located in the current
directory of the selected diskdrive. If "name" is a subdirectory it is
also deleted if it has been empty. Linked files and directories are
handled correctly.
M
returns the block allocation map of an AmigaDOS disk inserted in the
current diskdrive. A filled squar indicates that a sector is currently
allocated and in use. The upper part represents head 0 with sectors
incrementing from 0 to 10 in DD mode and from 0 to 21 in HD mode, while
the lower part represents head 1.
info
reports the drivemode (DD or HD). The sector of the bitmap is also
displayed and if the disk is validated or not. No writing fileoperation
can be performed without a validated disk. The type of the filesystem
is reported, too (DOSType, OFS or FFS and non international or
international). In addition, the number of free bytes is reported.
verify
toggles disk verification. If switched on, any track written to disk
will be checked for write errors. If there is an error, the user may
select between retry, ignore and abort to handle this situation.
format "name" <q> <0/1/2/3>
initialises the disk in the selected drive. No verification is done.
If the option q is specified, only the boot- and root-tracks are
formatted. The disk won't be installed. If no third parameter is
given, the disk is initialised as a standard OFS disk, otherwise the
parameter selects the filesystem between:
0: non international OldFilingSystem (DOSType DOS\0)
1: non international FastFilingSystem (DOSType DOS\1)
2: international OldFilingSystem (DOSType DOS\2)
3: international FastFilingSystem (DOSType DOS\3)
The default '0' is readable with any version of AmigaDOS. All other
filing systems need OS2.0 to be recognised as a valid disk outside the
BeerMon. A HD disk inserted in a Chinon FB357A HD diskdrive will be
formatted with 3520 sectors representing 1.76 MB.
install <0/1/2/3/4>
installs the disk in the selected drive. If no parameter is
specified, a WB2.x bootblock is installed, whose DOSType is determined
by examining the DOSType entry of the previous bootblock. If this entry
is invalid, the disk is rejected. The previous bootblock is ignored, if
the optional parameter is specified, which selects between:
0: non international OldFilingSystem (DOSType DOS\0) WB2.x
1: non international FastFilingSystem (DOSType DOS\1) WB2.x
2: international OldFilingSystem (DOSType DOS\2) WB2.x
3: international FastFilingSystem (DOSType DOS\3) WB2.x
4: non international OldFilingSystem (DOSType DOS\0) WB1.3
The last version is rather antique and should only be used if you have
to ensure that the CLI screen is opened early, when using OS2.0. Take
care not to change the filesystem of a disk already containing files, or
they are likely to become unreadable . Use the 'M' command to find out
the type of such a disk.
cls
clears the screen.
time
returns the current time and date, if there is a clockchip located at
the ususal location (either A500/A2000 or A3000/A4000 version).
/ [0..9]
returns info on several system structures.
Needs some rework.
cop <addr1 addr2>
searches for a valid copper instruction list beginning with "addr1"
and ending with "addr2"-1. If no parameter is specified, the whole chip
memory area is scanned. If a copperlist is considered valid, the start
and end address of this area is reported.
V <addr1> <addr2>
disassembles the copperinstructions at the memory locations beginning
with "addr1" and ending with "addr2"-1, if they are specified. The
disassembly includes symbolic register names and can be edited using the
cursor. If no valid instruction is given the line is not accepted and
not altered in memory. The new ECS and AGA registers are handled, too.
Examples of valid instructions:
-Move #$8201,BplCon0 -dc.l $1800fff
-EndList -Wait $0c,$00,1,$7f,$7f
-Skip $0c,$00,1,$7f,$7f
custom
displays a table with name and the corresponding address of each
custom chip register. The new ECS and AGA registers are handled, too.
If the screen is filled, you can advance to the next page by pressing
the right mouse button. The command can be aborted by pressing the
escape key.
h start end <addr> <jmp>
generates an object module including the data beginning with "start"
and ending with "end"-1. A code transfer routine is added using the
destination address "addr" or the parameter "start" if it is not
specified. The program is executed using the parameter "jmp" or the
parameter "start" if it is not specified. The transfer routine disables
DMA transfer, changes interrupt masks and flags and loads the active
stackpointer (which mostly is the USP) with the value $80000. The
generated module may (and should) be edited according to your needs
before being saved to disk.
b <addr>
shows memory locations beginning with "addr" in form of a bitmap.
Moving the mouse up increases the startaddress. The right mousebutton
toggles between Medres and Lores screenresolution. The escape key exits
the bitplane display. This is no IFF-searcher and is only intended to
get a quick overview about memory contents such as free space, code,
diskbuffers, bitplanes, bobs or sounddata. The memory locations need
not to be in chipmemory but may be any valid memory location below
$c80000. You may also display memory locations beginning with $f00000.
Take care of not displaying any locations without ram installed such
e.g. $b00000.
P
toggles printer output. If a printer is connected to the centronics
port and online. Any text output is both displayed on the screen and
sent to the printer if this function is enabled.
k
toggles the current keymap between german keymap and usa keymap. As
a default setting the german keymap is used.
config
performs an autoconfig procedure for Zorro-II and Zorro-III
expansions inside the lower 16MB address space. This enables you to use
Zorro type RAM-expansions (e.g. at $200000) after you entered the
module via reset (CTRL-A-A) or you performed the MC680x0
RESET-instruction.
*****************************************************************************
The supported Super Magic Drive cable wiring:
Amiga Parallel Port Super Magic Drive
D0 2 ---------------------- 2 D0
D1 3 ---------------------- 3 D1
D2 4 ---------------------- 4 D2
D3 5 ---------------------- 5 D3
D4 6 ---------------------- 6 D4
D5 7 ---------------------- 7 D5
D6 8 ---------------------- 8 D6
D7 9 ---------------------- 9 D7
GND 17 ---------------------- 17 GND
BUSY 11 ---------------------- 11 BUSY
SEL 13 ---------------------- 1 STROBE
*** So that's all, share, spread and enjoy the word and also the disk.
Greetings rush out to my friends around in TRSI, ESCape, the incredible
FakeBuster, CodX, SMF, PBA, Kelly van Vliet and anybody elso who has been
involved, or just deserves it. I also raise my chalice to the unnamed and
faceless ones who share my blood and speak my name...Shemhamforash!
signed: Carnivore/BeerMacht 18.06.1993